#pragma once

namespace Graphics{
	typedef enum _RENDERSTATETYPE {
	    RS_ZENABLE                   = 7,    /* ZBUFFERTYPE (or TRUE/FALSE for legacy) */
	    RS_FILLMODE                  = 8,    /* FILLMODE */
	    RS_SHADEMODE                 = 9,    /* SHADEMODE */
	    RS_ZWRITEENABLE              = 14,   /* TRUE to enable z writes */
	    RS_ALPHATESTENABLE           = 15,   /* TRUE to enable alpha tests */
	    RS_LASTPIXEL                 = 16,   /* TRUE for last-pixel on lines */
	    RS_SRCBLEND                  = 19,   /* BLEND */
	    RS_DESTBLEND                 = 20,   /* BLEND */
	    RS_CULLMODE                  = 22,   /* CULL */
	    RS_ZFUNC                     = 23,   /* CMPFUNC */
	    RS_ALPHAREF                  = 24,   /* FIXED */
	    RS_ALPHAFUNC                 = 25,   /* CMPFUNC */
	    RS_DITHERENABLE              = 26,   /* TRUE to enable dithering */
	    RS_ALPHABLENDENABLE          = 27,   /* TRUE to enable alpha blending */
	    RS_FOGENABLE                 = 28,   /* TRUE to enable fog blending */
	    RS_SPECULARENABLE            = 29,   /* TRUE to enable specular */
	    RS_FOGCOLOR                  = 34,   /* COLOR */
	    RS_FOGTABLEMODE              = 35,   /* FOGMODE */
	    RS_FOGSTART                  = 36,   /* Fog start (for both vertex and pixel fog) */
	    RS_FOGEND                    = 37,   /* Fog end      */
	    RS_FOGDENSITY                = 38,   /* Fog density  */
	    RS_RANGEFOGENABLE            = 48,   /* Enables range-based fog */
	    RS_STENCILENABLE             = 52,   /* BOOL enable/disable stenciling */
	    RS_STENCILFAIL               = 53,   /* STENCILOP to do if stencil test fails */
	    RS_STENCILZFAIL              = 54,   /* STENCILOP to do if stencil test passes and Z test fails */
	    RS_STENCILPASS               = 55,   /* STENCILOP to do if both stencil and Z tests pass */
	    RS_STENCILFUNC               = 56,   /* CMPFUNC fn.  Stencil Test passes if ((ref & mask) stencilfn (stencil & mask)) is true */
	    RS_STENCILREF                = 57,   /* Reference value used in stencil test */
	    RS_STENCILMASK               = 58,   /* Mask value used in stencil test */
	    RS_STENCILWRITEMASK          = 59,   /* Write mask applied to values written to stencil buffer */
	    RS_TEXTUREFACTOR             = 60,   /* COLOR used for multi-texture blend */
	    RS_WRAP0                     = 128,  /* wrap for 1st texture coord. set */
	    RS_WRAP1                     = 129,  /* wrap for 2nd texture coord. set */
	    RS_WRAP2                     = 130,  /* wrap for 3rd texture coord. set */
	    RS_WRAP3                     = 131,  /* wrap for 4th texture coord. set */
	    RS_WRAP4                     = 132,  /* wrap for 5th texture coord. set */
	    RS_WRAP5                     = 133,  /* wrap for 6th texture coord. set */
	    RS_WRAP6                     = 134,  /* wrap for 7th texture coord. set */
	    RS_WRAP7                     = 135,  /* wrap for 8th texture coord. set */
	    RS_CLIPPING                  = 136,
	    RS_LIGHTING                  = 137,
	    RS_AMBIENT                   = 139,
	    RS_FOGVERTEXMODE             = 140,
	    RS_COLORVERTEX               = 141,
	    RS_LOCALVIEWER               = 142,
	    RS_NORMALIZENORMALS          = 143,
	    RS_DIFFUSEMATERIALSOURCE     = 145,
	    RS_SPECULARMATERIALSOURCE    = 146,
	    RS_AMBIENTMATERIALSOURCE     = 147,
	    RS_EMISSIVEMATERIALSOURCE    = 148,
	    RS_VERTEXBLEND               = 151,
	    RS_CLIPPLANEENABLE           = 152,
	    RS_POINTSIZE                 = 154,   /* float point size */
	    RS_POINTSIZE_MIN             = 155,   /* float point size min threshold */
	    RS_POINTSPRITEENABLE         = 156,   /* BOOL point texture coord control */
	    RS_POINTSCALEENABLE          = 157,   /* BOOL point size scale enable */
	    RS_POINTSCALE_A              = 158,   /* float point attenuation A value */
	    RS_POINTSCALE_B              = 159,   /* float point attenuation B value */
	    RS_POINTSCALE_C              = 160,   /* float point attenuation C value */
	    RS_MULTISAMPLEANTIALIAS      = 161,  // BOOL - set to do FSAA with multisample buffer
	    RS_MULTISAMPLEMASK           = 162,  // DWORD - per-sample enable/disable
	    RS_PATCHEDGESTYLE            = 163,  // Sets whether patch edges will use float style tessellation
	    RS_DEBUGMONITORTOKEN         = 165,  // DEBUG ONLY - token to debug monitor
	    RS_POINTSIZE_MAX             = 166,   /* float point size max threshold */
	    RS_INDEXEDVERTEXBLENDENABLE  = 167,
	    RS_COLORWRITEENABLE          = 168,  // per-channel write enable
	    RS_TWEENFACTOR               = 170,   // float tween factor
	    RS_BLENDOP                   = 171,   // BLENDOP setting
	    RS_POSITIONDEGREE            = 172,   // NPatch position interpolation degree. DEGREE_LINEAR or DEGREE_CUBIC (default)
	    RS_NORMALDEGREE              = 173,   // NPatch normal interpolation degree. DEGREE_LINEAR (default) or DEGREE_QUADRATIC
	    RS_SCISSORTESTENABLE         = 174,
	    RS_SLOPESCALEDEPTHBIAS       = 175,
	    RS_ANTIALIASEDLINEENABLE     = 176,
	    RS_MINTESSELLATIONLEVEL      = 178,
	    RS_MAXTESSELLATIONLEVEL      = 179,
	    RS_ADAPTIVETESS_X            = 180,
	    RS_ADAPTIVETESS_Y            = 181,
	    RS_ADAPTIVETESS_Z            = 182,
	    RS_ADAPTIVETESS_W            = 183,
	    RS_ENABLEADAPTIVETESSELLATION = 184,
	    RS_TWOSIDEDSTENCILMODE       = 185,   /* BOOL enable/disable 2 sided stenciling */
	    RS_CCW_STENCILFAIL           = 186,   /* STENCILOP to do if ccw stencil test fails */
	    RS_CCW_STENCILZFAIL          = 187,   /* STENCILOP to do if ccw stencil test passes and Z test fails */
	    RS_CCW_STENCILPASS           = 188,   /* STENCILOP to do if both ccw stencil and Z tests pass */
	    RS_CCW_STENCILFUNC           = 189,   /* CMPFUNC fn.  ccw Stencil Test passes if ((ref & mask) stencilfn (stencil & mask)) is true */
	    RS_COLORWRITEENABLE1         = 190,   /* Additional ColorWriteEnables for the devices that support PMISCCAPS_INDEPENDENTWRITEMASKS */
	    RS_COLORWRITEENABLE2         = 191,   /* Additional ColorWriteEnables for the devices that support PMISCCAPS_INDEPENDENTWRITEMASKS */
	    RS_COLORWRITEENABLE3         = 192,   /* Additional ColorWriteEnables for the devices that support PMISCCAPS_INDEPENDENTWRITEMASKS */
	    RS_BLENDFACTOR               = 193,   /* COLOR used for a constant blend factor during alpha blending for devices that support PBLENDCAPS_BLENDFACTOR */
	    RS_SRGBWRITEENABLE           = 194,   /* Enable rendertarget writes to be DE-linearized to SRGB (for formats that expose USAGE_QUERY_SRGBWRITE) */
	    RS_DEPTHBIAS                 = 195,
	    RS_WRAP8                     = 198,   /* Additional wrap states for vs_3_0+ attributes with DECLUSAGE_TEXCOORD */
	    RS_WRAP9                     = 199,
	    RS_WRAP10                    = 200,
	    RS_WRAP11                    = 201,
	    RS_WRAP12                    = 202,
	    RS_WRAP13                    = 203,
	    RS_WRAP14                    = 204,
	    RS_WRAP15                    = 205,
	    RS_SEPARATEALPHABLENDENABLE  = 206,  /* TRUE to enable a separate blending function for the alpha channel */
	    RS_SRCBLENDALPHA             = 207,  /* SRC blend factor for the alpha channel when RS_SEPARATEDESTALPHAENABLE is TRUE */
	    RS_DESTBLENDALPHA            = 208,  /* DST blend factor for the alpha channel when RS_SEPARATEDESTALPHAENABLE is TRUE */
	    RS_BLENDOPALPHA              = 209,  /* Blending operation for the alpha channel when RS_SEPARATEDESTALPHAENABLE is TRUE */

	} RENDERSTATETYPE;
}